package models

import (
	"time"
)

type Permission struct {
	ID          uint      `json:"id" gorm:"primaryKey"`
	PID         uint      `json:"pid" gorm:"column:pid;default:0;comment:父级权限ID，0表示一级权限分组"`
	Name        string    `json:"name" gorm:"size:100;not null"`
	DisplayName string    `json:"display_name" gorm:"size:100;not null"`
	Resource    string    `json:"resource" gorm:"size:50;comment:资源标识"`
	Action      string    `json:"action" gorm:"size:50;comment:操作标识"`
	Description string    `json:"description" gorm:"type:text"`
	Sort        int       `json:"sort" gorm:"default:0;comment:排序"`
	IsGroup     bool      `json:"is_group" gorm:"default:false;comment:是否为分组"`
	CreatedAt   time.Time `json:"created_at"`
	UpdatedAt   time.Time `json:"updated_at"`

	// 关联
	Parent   *Permission  `json:"parent" gorm:"foreignKey:PID"`
	Children []Permission `json:"children" gorm:"foreignKey:PID"`
	Roles    []Role       `json:"roles" gorm:"many2many:role_permissions;"`

	// 三级分组字段（保留兼容性）
	GroupID   uint   `json:"group_id" gorm:"comment:权限分组ID（兼容字段）"`
	Category  string `json:"category" gorm:"size:50;comment:一级分组（兼容字段）"`
	Module    string `json:"module" gorm:"size:50;comment:二级分组（兼容字段）"`
	SubModule string `json:"sub_module" gorm:"size:50;comment:三级分组（兼容字段）"`
	SortOrder int    `json:"sort_order" gorm:"default:0;comment:排序（兼容字段）"`
}

// 旧的三级分组结构（保留用于兼容性）
type PermissionGroupOld struct {
	Category    string             `json:"category"`
	DisplayName string             `json:"display_name"`
	Modules     []PermissionModule `json:"modules"`
}

type PermissionModule struct {
	Module      string                `json:"module"`
	DisplayName string                `json:"display_name"`
	SubModules  []PermissionSubModule `json:"sub_modules"`
}

type PermissionSubModule struct {
	SubModule   string       `json:"sub_module"`
	DisplayName string       `json:"display_name"`
	Permissions []Permission `json:"permissions"`
}
